package com.koi.common.resultex;

import com.koi.common.enums.common.IResultEnum;
import lombok.Data;

/**
 * @author ･ᴗ･
 * @description [统一返回R类]
 */
@Data
public class R implements java.io.Serializable {

    /**
     * 状态码
     */
    private Integer status;

    /**
     * 返回信息
     */
    private String msg;

    /**
     * 返回数据[由于返回数据是不确定类型，所以只能考虑Object 或者 泛型]
     */
    private Object data;

    public R() {

    }

    /**
     * 方法封装：解决调用方便的问题
     */
    public static R success(Object obj) {
        // 200写死，原因很简单：在开发成功只允许只有一种声音，不允许多种
        return koiResult(obj, IResultEnum.SUCCESS, IResultEnum.SUCCESS_TEXT);
    }

    public static R success() {
        // 200写死，原因很简单：在开发成功只允许只有一种声音，不允许多种
        return koiResult(IResultEnum.SUCCESS_TEXT);
    }

    public static R success(Object obj, String msg) {
        return koiResult(obj, IResultEnum.SUCCESS, IResultEnum.SUCCESS_TEXT);
    }

    // 错误为什么传递status。成功只有一种，但是错误有N状态
    public static R error(Integer status, String msg) {
        return koiResult(null, status, msg);
    }

    public static R error(Integer status, String msg, Object obj) {
        return koiResult(obj, status, msg);
    }

    public static R error(IResultEnum result) {
        return koiResult(null, result.status(), result.message());
    }

    private static R koiResult(Object data, Integer status, String msg) {
        R r = new R();
        r.setStatus(status);
        r.setMsg(msg);
        r.setData(data);
        return r;
    }

    private static R koiResult(String msg) {
        R r = new R();
        r.setStatus(IResultEnum.SUCCESS);
        r.setMsg(msg);
        return r;
    }

}
